# -*- coding: utf-8 -*-

"""
Nome do modulo: baseDados.py
Autor: Soraia Janeiro
Data: 16/11/2013
Obs: Cria a base de dados e escreve os dados.
"""
from leitura import Leitura
import sqlite3

class BaseDados():
	"""
	A classe faz a criação da base de dados e insere os dados na mesma.
	"""
	
	def __init__(self, ficheiro):
		"""
		Constructor da classe
		"""
		
		self.ficheiro = ficheiro
		conn = sqlite3.connect('Inscritos.db')
		cursor = conn.cursor()
		self.criar_bd(conn, cursor)
		self.escrever_bd(conn, cursor)
		self.escrever_distritos(cursor)
		self.escrever_instituicoes_distritos(cursor)
		conn.commit()
		cursor.close()
		
	
	def criar_bd(self, conn, cursor):
		"""   
		O método executa a criação da base de dados
		É efectuada a criação de uma tabela com todos os dados.  
		"""
		  
		cursor.execute('''drop table if exists Inscritos''')
		cursor.execute ('''create table if not exists Inscritos 
		(Chave INTEGER, 
		Codigo_Instituicao INTEGER, Codigo_Curso INTEGER, 
		Nome_Instituicao TEXT, Nome_Curso TEXT, 
		Grau TEXT, Vagas_Iniciais INTEGER, Colocados INTEGER, 
		Nota_Ultimo_Candidato INTEGER, 
		Vagas_Sobrantes INTEGER)''')
		cursor.execute('''drop table if exists Distritos''')
		cursor.execute ('''create table if not exists Distritos 
		(Codigo_Distrito INTEGER PRIMARY KEY, 
		Nome_Distrito TEXT)''')
		cursor.execute('''drop table if exists Instituicoes''')
		cursor.execute('''create table if not exists Instituicoes 
		(Codigo_Instituicao INTEGER, 
		Nome_Instituicao TEXT,
		Codigo_Distrito INTEGER, 
		Nome_Distrito TEXT)''')
		pass

	def escrever_bd(self, conn, cursor):
		"""
		O método escreve os dados na base de dados criada.
		Atribui valores aos campos da base de dados.
		"""
		
		obj = Leitura()
		conteudo_xls = obj.ler_ficheiro(self.ficheiro)
		chave = 1
		for linha in conteudo_xls:
			cursor.execute('''insert into Inscritos 
			(Chave, Codigo_Instituicao, Codigo_Curso, 
			Nome_Instituicao, Nome_Curso, Grau, Vagas_Iniciais, Colocados, 
			Nota_Ultimo_Candidato, 
			Vagas_Sobrantes)values("{0}",
			"{1}","{2}","{3}","{4}","{5}","{6}",
			"{7}","{8}","{9}")'''.format(chave, 
										linha[0], 
										linha[1], 
										linha[2], 
										linha[3], 
										linha[4], 
										linha[5], 
										linha[6], 
										linha[7], 
										linha[8]))
			chave += 1
			pass
		pass
		
	def escrever_distritos(self, cursor):
		"""
		O método escreve na tabela os distritos.
		"""
		
		lista_distritos = ('Lisboa', 'Porto', 
		'Setúbal', 'Braga', 'Aveiro',
		'Leiria', 'Santarém', 'Faro', 
		'Coimbra', 'Viseu', 'Madeira', 
		'Açores', 'Viana do Castelo', 'Vila Real', 
		'Castelo Branco', 'Évora','Guarda', 
		
		'Beja', 'Bragança', 'Portalegre')
		for x in range(0, 20):
			cursor.execute('''insert into Distritos values({0}, "{1}")'''.format(x + 1, lista_distritos[x]))
			pass
		pass
	
	def escrever_instituicoes_distritos(self, cursor):
		"""
		O método escreve na tabela Instituições, o codigo da instituição, o codigo do distrito e o nome da instituição. 
		Atribuí a cada instituição, um distrito.
		"""
		
		instituto = self.separar_institutos_escolas(cursor)
		cursor.execute('''SELECT * FROM Distritos ''')
		dados_bd = cursor.fetchall()
		print "select"
		for linha in range(0, len(dados_bd)):
			print "tem"
			if instituto in Distritos[linha, 1]:
				print "coiso"
				
				cursor.execute('''insert into Instituicoes values({0}, {1}, "{2}")'''.format(
				Codigo_Instituicao, Codigo_Distrito, instituto))
				
		return dados_bd
		
		"""
		cursor.execute('''SELECT DISTINCT Codigo_Instituicao FROM Inscritos ''')
		
		
		for linha in range(0, len(dados_bd)):
			Codigo_Instituicao.Instituicoes = dados_bd[linha][0].Inscritos
			print Codigo_Instituicao.Instituicoes
			self.separar_institutos_escolas(cursor)
			
			cursor.execute('''insert into Instituicoes values({0}, {1}, "{2}")'''.format(Codigo_Instituicao, Codigo_Distrito, Nome_Instituicao))
			
		"""	
		
		
	def separar_institutos_escolas(self, cursor):
		"""
		O método sepera o nome dos institutos, das escola.
		"""

		cursor.execute('''SELECT DISTINCT Nome_Instituicao FROM Inscritos ''')
		dados_bd = cursor.fetchall()
		
		for linha in range(0, len(dados_bd)):
			"""
			if u"Douro" in dados_bd[linha][0]:
				nome = dados_bd[linha][0]	
				print "aqui sem split", nome
				nome = nome.split('-')[0]
				print "ali", nome
				"""
			nome = dados_bd[linha][0]
			nome = nome.split('-')[0]
		return nome  
		
		
		
		
